闲扯
今天上课将网络流例题,难得的想出怎么建图的几个题之一。。
题面
Solution
因为只有羊和狼两种生物,且不能分到同一个集合中,所以可以建立二分图。而我们要用最少的篱笆,将狼和羊分开,考虑最小割。
虚拟一个超级源点,连向所有是狼的格子,流量为 $INF$ ,表示这个边不能割。
虚拟一个超级汇点,将所有是羊的格子连向它,流量为 $INF$ ,理由同上。
然后对于每一个格子,向他的四周连一条流量为 $1$ 的边,表示在这两个格子之间修一个篱笆,费用为 $1$ 。
当然,如果相邻两个格子都是狼或者都是羊,就不用连了,因为没必要在这里修篱笆。
然后跑最小割,每条割边表示在这里修一个篱笆。
正确性:对于所有的狼、羊,都是连着源点、汇点的,流量为 $INF$ ,一定不会割这些边,而狼和羊、空格子连边代表篱笆,这个图的最小割集使得该图分为只含狼、只含羊的两个集合,也就满足了题意。
Code
1 |
|
总结
这应该是一个比较简单的最小割的题吧,建图比较明显,看到两种不同的东西,不能分在一起,可以往这方面联想一下。